// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CC_LAYERS_LAYER_IMPL_TEST_PROPERTIES_H_
#define CC_LAYERS_LAYER_IMPL_TEST_PROPERTIES_H_

#include <set>
#include <vector>

#include "base/memory/ptr_util.h"
#include "cc/layers/layer_collections.h"
#include "cc/layers/layer_position_constraint.h"
#include "cc/layers/layer_sticky_position_constraint.h"
#include "cc/output/filter_operations.h"
#include "third_party/skia/include/core/SkBlendMode.h"
#include "ui/gfx/geometry/point3_f.h"
#include "ui/gfx/transform.h"

namespace cc {

class CopyOutputRequest;
class LayerImpl;

struct CC_EXPORT LayerImplTestProperties {
    explicit LayerImplTestProperties(LayerImpl* owning_layer);
    ~LayerImplTestProperties();

    void AddChild(std::unique_ptr<LayerImpl> child);
    std::unique_ptr<LayerImpl> RemoveChild(LayerImpl* child);
    void SetMaskLayer(std::unique_ptr<LayerImpl> mask);

    LayerImpl* owning_layer;
    bool double_sided;
    bool force_render_surface;
    bool is_container_for_fixed_position_layers;
    bool should_flatten_transform;
    bool hide_layer_and_subtree;
    bool opacity_can_animate;
    int num_descendants_that_draw_content;
    int sorting_context_id;
    size_t num_unclipped_descendants;
    float opacity;
    FilterOperations filters;
    FilterOperations background_filters;
    gfx::PointF filters_origin;
    SkBlendMode blend_mode;
    LayerPositionConstraint position_constraint;
    LayerStickyPositionConstraint sticky_position_constraint;
    gfx::Point3F transform_origin;
    gfx::Transform transform;
    LayerImpl* scroll_parent;
    std::unique_ptr<std::set<LayerImpl*>> scroll_children;
    LayerImpl* clip_parent;
    std::unique_ptr<std::set<LayerImpl*>> clip_children;
    std::vector<std::unique_ptr<CopyOutputRequest>> copy_requests;
    LayerImplList children;
    LayerImpl* mask_layer;
    LayerImpl* parent;
};

} // namespace cc

#endif // CC_LAYERS_LAYER_IMPL_TEST_PROPERTIES_H_
